package br.com.sgi.model;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.Size;

import org.hibernate.annotations.Type;
import org.hibernate.validator.constraints.NotEmpty;

@Entity
@Table(name = "VISITANTE")
@NamedQueries( {
		@NamedQuery(name = "buscarVisititantesPorFiltros", query = " SELECT v FROM Visitante v "
				+ " WHERE v.igrejaPertence.sistema.coSeqSistema =:coSistema"
				+ " AND (v.igrejaPertence.coSeqIgreja = :coIgreja OR v.igrejaPertence.coSeqIgreja in(SELECT ui.igreja.coSeqIgreja from UsersIgreja ui WHERE ui.users.username= :username)) "
				+ " AND v.nome  like :nome"),
		@NamedQuery(name = "buscarTodosVisitantes", query = " SELECT v FROM Visitante v "
				+ " WHERE v.igrejaPertence.sistema.coSeqSistema =:coSistema"
				+ " AND (v.igrejaPertence.coSeqIgreja = :coIgreja OR v.igrejaPertence.coSeqIgreja in(SELECT ui.igreja.coSeqIgreja from UsersIgreja ui WHERE ui.users.username= :username)) ") })
public class Visitante {

	@Id
	@Column(name = "CO_SEQ_VISITANTE")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_visitante_seqvisitante")
	@SequenceGenerator(name = "seq_visitante_seqvisitante", sequenceName = "SGI.seq_visitante")
	private Long coSeqVisitante;

	@Size(max = 100)
	@NotEmpty
	private String nome;

	@Size(max = 20)
	private String telefone;

	@Size(max = 20)
	private String celular;

	@JoinColumn(name = "CO_IGREJA")
	@ManyToOne
	private Igreja igrejaPertence;

	@JoinColumn(name = "CO_MEMBRO")
	@ManyToOne
	private Membro membroResponsavel;

	@Column(name = "DT_NASCIMENTO")
	private Date dtNascimento;

	@Column(name = "DT_CADASTRO_VISITANTE")
	private Date dtCadastroVisitante;

	@Column(name = "INATIVO", length = 1)
	@Type(type = "br.com.sgi.type.SimNaoType")
	private Boolean inativo;

	@Size(max = 2)
	private String sexo;

	@Column(name = "ESTADO_CIVIL")
	@Size(max = 15)
	private String estadoCivil;

	@Column(name = "OBSERVACAO")
	@Size(max = 2000)
	private String observacao;

	@Column(name = "EMAIL")
	@Size(max = 100)
	private String email;
	
	@Column(name = "E_MEMBRO")
	@Size(max = 1)
	private String eMembro;
	
	@Size(max = 100)
	private String logradouro;

	private Integer numero;

	@Size(max = 100)
	private String complemento;

	@Size(max = 100)
	private String bairro;

	@Size(max = 60)
	private String cidade;

	@Size(max = 25)
	private String cep;


	/**
	 * @return the logradouro
	 */
	public String getLogradouro() {
		return logradouro;
	}

	/**
	 * @param logradouro the logradouro to set
	 */
	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}

	/**
	 * @return the numero
	 */
	public Integer getNumero() {
		return numero;
	}

	/**
	 * @param numero the numero to set
	 */
	public void setNumero(Integer numero) {
		this.numero = numero;
	}

	/**
	 * @return the complemento
	 */
	public String getComplemento() {
		return complemento;
	}

	/**
	 * @param complemento the complemento to set
	 */
	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	/**
	 * @return the bairro
	 */
	public String getBairro() {
		return bairro;
	}

	/**
	 * @param bairro the bairro to set
	 */
	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	/**
	 * @return the cidade
	 */
	public String getCidade() {
		return cidade;
	}

	/**
	 * @param cidade the cidade to set
	 */
	public void setCidade(String cidade) {
		this.cidade = cidade;
	}


	/**
	 * @return the cep
	 */
	public String getCep() {
		return cep;
	}

	/**
	 * @param cep the cep to set
	 */
	public void setCep(String cep) {
		this.cep = cep;
	}

	@Transient
	private String status;

	public String getCelular() {
		return celular;
	}

	public Long getCoSeqVisitante() {
		return coSeqVisitante;
	}

	public Date getDtCadastroVisitante() {
		return dtCadastroVisitante;
	}

	public Date getDtNascimento() {
		return dtNascimento;
	}

	public String getEmail() {
		return email;
	}

	public String getEstadoCivil() {
		return estadoCivil;
	}

	public Igreja getIgrejaPertence() {
		return igrejaPertence;
	}

	public Boolean getInativo() {
		return inativo;
	}

	public Membro getMembroResponsavel() {
		return membroResponsavel;
	}

	public String getNome() {
		return nome;
	}

	public String getObservacao() {
		return observacao;
	}

	public String getSexo() {
		return sexo;
	}

	public String getStatus() {
		if (inativo == null || inativo) {
			status = "Inativo";
		} else {
			status = "Ativo";
		}

		return status;
	}

	public String getTelefone() {
		return telefone;
	}

	public void setCelular(String celular) {
		this.celular = celular;
	}

	public void setCoSeqVisitante(Long coSeqVisitante) {
		this.coSeqVisitante = coSeqVisitante;
	}

	public void setDtCadastroVisitante(Date dtCadastroVisitante) {
		this.dtCadastroVisitante = dtCadastroVisitante;
	}

	public void setDtNascimento(Date dtNascimento) {
		this.dtNascimento = dtNascimento;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public void setEstadoCivil(String estadoCivil) {
		this.estadoCivil = estadoCivil;
	}

	public void setIgrejaPertence(Igreja igrejaPertence) {
		this.igrejaPertence = igrejaPertence;
	}

	public void setInativo(Boolean inativo) {
		this.inativo = inativo;
	}

	public void setMembroResponsavel(Membro membroResponsavel) {
		this.membroResponsavel = membroResponsavel;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	/**
	 * @return the eMembro
	 */
	public String geteMembro() {
		return eMembro;
	}

	/**
	 * @param eMembro the eMembro to set
	 */
	public void seteMembro(String eMembro) {
		this.eMembro = eMembro;
	}

	
	
	

}
